package com.mj.listen2._01_排序.cmp;

/**
 * 冒泡排序优化2：如果已经有序，就不再遍历
 */
public class _01_BubbleSort3<T extends Comparable<T>> extends Sort<T> {
    @Override
    protected void sort() {
        for (int end = array.length - 1; end > 0; end--) {
            // 临界值，数组这个索引后边所有元素都是有序的
            int sortedIndex = 0;
            for (int i = 1; i <= end; i++) {
                if (cmp(i - 1, i) > 0) {
                    swap(i - 1, i);
                    // 记录交换的最后的索引，下一次扫描到的最后位置索引
                    sortedIndex = i;
                }
            }
            // 更新扫描的尾索引
            end = sortedIndex;
        }
    }
}
